Programming data into a non-volatile memory (NVM) mass storage device (sometimes referred to as “writing”) usually comprises increasing the threshold voltage (Vt) of selected NVM cells in an array, wherein different threshold voltages are associated with different program levels, such as “11”, “01”, “00”, and “10”. Programming these bits typically comprises asserting one or more programming pulses, each increasing a given NVM cell's Vt by a small increment, followed by a verification phase in which the bits are read to determine (verify) whether the cells have been successfully programmed. Multiple cycles of program pulses followed by verify may be needed to complete programming all the bits.
Program/Verify Cycle
Programming is typically performed in increments, with pulses of voltage—after each pulse, a verify operation occurs in which the threshold voltage level of the cell is measured (read). The general idea is to “nudge” the threshold voltage to the desired level, rather than over-shooting (over programming) or under-shooting (under programming) the desired level. With appropriate control mechanisms, only a few pulses (nudges) are required. A similar concept of cycles of pulse followed by verify until a desired Vt has been attained may sometimes be used during the erase operation, to avoid under-erase or over-erase. See, for example, commonly-owned U.S. Pat. Nos. 6,292,394; 6,396,741; 6,490,204; 6,552,387; 6,636,440; and 6,643,181.
Multi-Level Programming
In modern NVM memory cells, four or more program levels are possible, representing for example, binary “00” (zero), binary “01” (one), binary “10” (two) and binary “11” (three). This (having more than two program levels) is referred to as “multi-level programming” (MLC), and exemplary threshold voltages representing these four program levels might be, for example:                the center value for “11” equals approximately 4.0 volts        the center value for “01” equals approximately 4.4 volts        the center value for “00” equals approximately 4.8 volts        the center value for “10” equals approximately 5.4 volts        
Thus, it is evident that multi-level programming is much more “sensitive” than single level programming and, when reading the contents of a memory cell, small changes or differences in measured voltage can lead to erroneous results.
An MLC programming algorithm may include 2 phases, which may generally be referred to here as “Phase 1” and “Phase 2”, each phase operating like a normal two bit programming algorithm. For example, in Phase 1, which may be considered to be a “rough” phase, user data may quickly be programmed, in a series of “rough” increments, to an initial level (Vi) which is below a target level (Vt). Once all the data is above the initial level (Vi), in the second phase (Phase 2), the same data may be programmed again (or “re-programmed”) to the target levels (Vts), which may be considered to be a “fine” phase. In Phase 2, some of the cells will already be at the target level from the Phase 1 programming, and may not need to be re-programmed. Because of the two phases, the programming operation requires two (2) buffers, and each of the two buffers may be implemented in SRAM. These 2 buffers are required on top of the cache programming functionality requirement for 2 buffers as well.
It may be appreciated that although everything could be done in a single (one) phase of fine increments, the two phase approach (rough increments followed by fine increments) can achieve the desired Vts without overshooting more efficiently and more quickly.
Cache Operation
Cache programming generally refers to the practice of putting a cache memory before the memory array. Otherwise referred to as “pipelining”, a page of data may be input to a cache register, then this data is transferred to a data register when a cache programming command is issued. When the transfer is complete, the cache register is available to receive new data input, while the data register simultaneously programs the memory array.
A normal cache programming operation requires two buffers, one working with the user and the other working with the array. The data to be programmed to the NVM array is loaded by the user (which may be a software application) and temporarily stored in a volatile data buffer such as an SRAM array. After applying a programming pulse, the data read out from the NVM array is usually stored in a second volatile buffer, and program verification is carried out by comparing the data of the two buffers (the original data to be programmed and the temporarily read out data).
Cache programming may use a page-size cache register to program pages of data within a block. In the standard page program operation, the device has to finish programming the data into the memory array before a new page can be programmed. The advantage of the cache program operation is that it allows new data to be input while the previous data, that was transferred to the page buffer, is programmed into the memory array.
U.S. Pat. No. 6,963,509 discloses a page buffer having dual register. A data transmission path is formed by installing switching units so that a main register, as well as a cache register, can be directly provided with a data. Therefore, a program operation is performed directly by using the main register in a normal program operation, and by using the cache register in a cache program operation.
US 20030174555 discloses a method and structure for data verification operation for non-volatile memories. A flash EEPROM memory-based storage subsystem includes one or more flash memory arrays, each with three data registers and a controller circuit. During a flash program operation, one data register is used to control the program operation, a second register is used to hold the target data value, and a third register is used to load the next sector's data. Subsequent to a flash program operation, a sector's data are read from a flash array into the first data register and compared to the target data stored in the second register. When the data is verified good, the data from the third register is copied into the first and second registers for the next program operation.
Programming Multi-Level Cells
FIGS. 1A and 1B illustrate threshold voltage (Vt) distributions for the erase state (“11”) and three program states (“01”, “00”, “10”). The horizontal axis is threshold voltage (Vt), and the vertical axis is the number of cells at various Vt's.
With multi-level programming, the separations between threshold voltages for the different program levels (including, erase state) are relatively close together. Therefore, for purposes of efficiency, bits may first be programmed coarsely (in relatively large steps) in a first phase of programming (“Phase 1”), then in a second phase of programming (“Phase 2”) the bits are moved in smaller steps to the desired Vt.
FIG. 1A illustrates a first phase (Phase 1) of programming. Programming proceeds in coarse (rough) steps to get all of the non-erased bits (“01”, “00”, “10”) above an initial threshold voltage (Vi) which is chosen to be slightly less than the lowest Vt for non-erased bits. As can readily be seen, many of the bits may have Vts which are overlapping at this point. And, as will be evident from a comparison with the next diagram (FIG. 1B), some of the bits may have reached their final Vt in Phase 1. It should be understood that FIG. 1A is greatly simplified, for illustrative clarity, and there is a Vi threshold per level (not only for the “01” state, as illustrated)—similar to what is shown in FIG. 1B. Also, V1, V2, V3 are omitted, and would be placed accordingly (similar to FIG. 1B).
FIG. 1B illustrates a second phase (Phase 2) of programming. Programming proceeds in smaller (fine) steps to get all of the non-erased bits (“01”, “00”, “10”) above their respective “verify” voltages, represented here as V1 (for the “01” bits), V2 (for the “00” bits) and V3 (for the “10” bits). Also shown in this diagram are read voltages R1, R2 and R3 for the respective “01”, “00” and “10” bits. The read voltage (R1, R2, R3) for a given program level is established to be slightly below the verify voltage (V1, V2, V3) for the given program level. (The read levels are typically slightly below the verify voltages to overcome retention phenomena.)
An illustration of a two-phase scheme to reduce programming time may be found at page 11 of Flash Memory Trends & Perspectives, Geoffrey MacGillivray, Semiconductor Insights, 2006.
Data Scrambling
A problem with writing to (programming) memory cells is that as data (and new data) is written to a group of memory cells, individual ones of the cells may be programmed more (more times) than others. Such a lack of uniformity can cause difficulties when operating the memory cells, particularly with MLC operation of memory cells. In other words, if a given memory cell (or half cell) has been subjected to a different number of programming operations (injection of electrons to raise the threshold voltage) than other cells, it can become “over-programmed” and will tend to operate differently than other cells, and is likely to lead to problems in accurately reading the contents of the cell. A problem can also be encountered during the Erase operation: Non-programmed cells may get over-erased.
One solution to the problem is to perform program before erase (PBE) on all of the cells (or half cells) being erased. This procedure, referred to as “full PBE”, is simple and effective, and ensures an even program rate (uniformity). However, it takes a lot of time to perform the program operation (such as injection of electrons into the charge storage or trapping area of the memory cell). In addition to the “full PBE” there is the option of “sparse PBE”, wherein each time a different group of cells is programmed.
Another solution to the problem is to scramble the data (“data scrambling”). This means changing ones to zeros in an organized manner so that all cells will be subject to the same number of 1s and 0s, within a statistically valid range. This also ensures an even program rate (uniformity).
Data scrambling may be achieved by doing an invert on each bit, according to a scrambling pattern. When being read, the data is unscrambled, using the same pattern. The pattern is the “key”.
Data scrambling strives to ensure a more even distribution of 1s and 0s being written (“even program rate”), even if the data for a given cell (or half cell) is repeatedly being written at one programming level (usually a binary 0). For example, if a given memory cell (or half cell) is being targeted for programming repeatedly with binary 0 (due to the data for that bit being programmed not changing over a number of program cycles), data scrambling will cause it to be programmed sometimes with a 0 and sometimes with a 1 (which may be defined as the erase state).
The goal of data scrambling is to make uniform the number of times that a given cell (or half-cell) is programmed to a given program, or voltage, level). Another way of referring to such data scrambling is “balancing the content to be programmed”, or “balancing the programming rate”.
Commonly-Owned Patents, and Publications
Commonly-owned patents disclose structure and operation of NROM and related ONO memory cells. Some examples may be found in commonly-owned U.S. Pat. Nos. 5,768,192, 6,011,725, 6,649,972 and 6,552,387.
Commonly-owned patents disclose architectural aspects of an NROM and related ONO array, (some of which have application to other types of NVM array) such as segmentation of the array to handle disruption in its operation, and symmetric architecture and non-symmetric architecture for specific products, as well as the use of NROM and other NVM array(s) related to a virtual ground array. Some examples may be found in commonly-owned U.S. Pat. Nos. 5,963,465, 6,285,574 and 6,633,496.
Commonly-owned patents also disclose additional aspects at the architecture level, including peripheral circuits that may be used to control an NROM array, or the like. Some examples may be found in commonly-owned U.S. Pat. Nos. 6,233,180, and 6,448,750.
Commonly-owned patents also disclose several methods of operation of NROM and similar arrays, such as algorithms related to programming, erasing, and/or reading such arrays. Some examples may be found in commonly-owned U.S. Pat. Nos. 6,215,148, 6,292,394 and 6,477,084.
Commonly-owned patents also disclose manufacturing processes, such as the process of forming a thin nitride layer that traps hot electrons as they are injected into the nitride layer. Some examples may be found in commonly-owned U.S. Pat. Nos. 5,966,603, 6,030,871, 6,133,095 and 6,583,007.
Commonly-owned patents also disclose algorithms and methods of operation for each segment or technological application, such as: fast programming methodologies in all flash memory segments, with particular focus on the data flash segment, smart programming algorithms in the code flash and EEPROM segments, and a single device containing a combination of data flash, code flash, and/or EEPROM. Some examples may be found in commonly-owned U.S. Pat. Nos. 6,954,393 and 6,967,896.
Where applicable, descriptions involving NROM are intended specifically to include related oxide-nitride technologies, including SONOS (Silicon-Oxide-Nitride-Oxide-Silicon), MNOS (Metal-Nitride-Oxide-Silicon), MONOS (Metal-Oxide-Nitride-Oxide-Silicon), and the like, used for NVM devices. Further descriptions of NVM and related technologies may be found at “Non Volatile Memory Technology”, Vol. 1 & 2 (2005), Vol. 3 (2006) and Vol. 4 (2007), published by Saifun Semiconductor; “Microchip Fabrication”, by Peter Van Zant, 5th Edition 2004; “Application-Specific Integrated Circuits” by Michael John Sebastian Smith, 1997; “Semiconductor and Electronic Devices”, by Adir Bar-Lev, 2nd Edition, 1999; “Digital Integrated Circuits” by Jan M. Rabaey, Anantha Chandrakasan and Borivoje Nikolic, 2nd Edition, 2002 and materials presented at and through http://siliconnexus.com, “Design Considerations in Scaled SONOS Nonvolatile Memory Devices” found at:    http://klabs.org/richcontent/MemoryContent/nvmt_symp/nvmts—2000/presentations/bu_white_sono s_lehigh_univ.pdf, “SONOS Nonvolatile Semiconductor Memories for Space and Military Applications” found at:    http://klabs.org/richcontent/MemoryContent/nvmt_symp/nvmts—2000/papers/adams_d.pdf, “Philips Research-Technologies-Embedded Nonvolatile Memories” found at:    http://www.research.philips.com/technologies/ics/nvmemories/index.html, and “Semiconductor Memory: Non-Volatile Memory (NVM)” found at:    http://www.ece.nus.edu.sg/stfpage/elezhucx/myweb/NVM.pdf, all of which are incorporated by reference herein in their entirety.Glossary
Unless otherwise noted, or as may be evident from the context of their usage, any terms, abbreviations, acronyms or scientific symbols and notations used herein are to be given their ordinary meaning in the technical discipline to which the disclosure most nearly pertains. The following terms, abbreviations and acronyms may be used throughout the descriptions presented herein and should generally be given the following meaning unless contradicted or elaborated upon by other descriptions set forth herein. Some of the terms set forth below may be registered trademarks (®).
When glossary terms (such as abbreviations) are used in the description, no distinction should be made between the use of capital (uppercase) and lowercase letters. For example “ABC”, “abc” and “Abc”, or any other combination of upper and lower case letters with these 3 letters in the same order, should be considered to have the same meaning as one another, unless indicated or explicitly stated to be otherwise. The same commonality generally applies to glossary terms (such as abbreviations) which include subscripts, which may appear with or without subscripts, such as “Xyz” and “Xyz”. Additionally, plurals of glossary terms may or may not include an apostrophe before the final “s”—for example, ABCs or ABC's.    algorithm In mathematics, computing, linguistics, and related disciplines, an algorithm is a definite list of well-defined instructions for completing a task; that given an initial state, will proceed through a well-defined series of successive states, eventually terminating in an end-state.    array memory cells may optionally be organized in an array of rows and columns, and may be connected to selected bit lines and word lines in the array.            The array may be organized into various logical sections containing pluralities of memory cells, such as blocks, pages and sectors. Some of these sections may be physically isolated and operated independently from one another.            BER short for bit error rate. In telecommunication, an error ratio is the ratio of the number of bits, elements, characters, or blocks incorrectly received to the total number of bits, elements, characters, or blocks sent during a specified time interval. The most commonly encountered ratio is the bit error ratio (BER)—also sometimes referred to as bit error rate.    binary system The binary numeral system, or base-2 number system, is a numeral system that represents numeric values using only two symbols, usually “0” and “1”. Owing to its straightforward implementation in electronic circuitry, the binary system is used internally by virtually all modern computers. Many 1s and 0s can be strung together to represent larger numbers. Starting at the right is the “place” for “ones”, and there can be either 0 or 1 one's. The next “place” to the left is for “twos”, and there can be either 0 or 1 0 two's. The next “place” to the left is for “fours”, and there can be either 0 or 1 0 fours. The next “place” to the left is for “eights”, and there can be either 0 or 1 0 eights. This continues for as many places as desired, typically 4, 8, 16, 32 or 64 places. For example,            0000 represents zero (a “0” in all four places)        0001 represents one (a “1” in the ones place, and 0s in all of the other three places)        0010 represents two (a “1” in the twos place, and 0s in the other three places)        0011 represents three (a “1” in the ones place, plus a “1” in the twos place)        0100 represents four (a “1” in the fours place, and 0s in all of the other three places)        1000 represents eight (a “1” in the eights place, and 0s in all of the other three places)        1010 represents ten (a “1” in the ones place, plus a “1” in the twos place)        In binary notation, each “place” to the left of the first (ones) place has a possible value of either 0 or, if there is a “1” in the place, two times the value of the place immediately to the right. Hence, from right (least significant bit) to left (most significant bit), the places have a value of either 0 or 1, 2, 4, 8, 16, 32, 64, 128, and so forth.        Generally, counting in binary begins with “zero”, rather than with “one”, as we are accustomed to. For example, four items could be counted as follows: “zero” (00), “one” (01), “two” (10), “three” (11).            bit The word “bit” is a shortening of the words “binary digit.” A bit refers to a digit in the binary numeral system (base 2). A given bit is either a binary “1” or “0”. For example, the number 1001011 is 7 bits long. The unit is sometimes abbreviated to “b”. Terms for large quantities of bits can be formed using the standard range of prefixes, such as kilobit (Kbit), megabit (Mbit) and gigabit (Gbit). A typical unit of 8 bits is called a Byte, and the basic unit for 128 Bytes to 16K Bytes is treated as a “page”. That is the “mathematical” definition of “bit”. In some cases, the actual (physical) left and right charge storage areas of an NROM cell are conveniently referred to as the left “bit” and the right “bit”, even though they may store more than one binary bit (with MLC, each storage area can store at least two binary bits). The intended meaning of “bit” (mathematical or physical) should be apparent from the context in which it is used.    byte A byte is commonly used as a unit of storage measurement in computers, regardless of the type of data being stored. It is also one of the basic integral data types in many programming languages. A byte is a contiguous sequence of a fixed number of binary bits. In recent years, the use of a byte to mean 8 bits is nearly ubiquitous. The unit is sometimes abbreviated to “B”. Terms for large quantities of Bytes can be formed using the standard range of prefixes, for example, kilobyte (KB), megabyte (MB) and gigabyte (GB).    cache In computer science, a cache is a collection of data duplicating original values stored elsewhere or computed earlier, where the original data is expensive to fetch (due to longer access time) or to compute, compared to the cost of reading the cache. In other words, a cache is a temporary storage area where, for example, frequently accessed data can be stored for rapid access. Once the data is stored in the cache, future use can be made by accessing the cached copy rather than re-fetching or recomputing the original data, so that the average access time is shorter.    cell the term “cell” may be used to describe anything, such as an NVM cell, that can store one unit of analog data. This includes FG memory cells, and non-FG memory cells, such as NROM. See half cell.    distribution overlap A number of cells programmed at a given program level may exhibit a distribution of threshold voltages. Usually, the distribution for one program level is separated from a distribution for another program level. However, due to threshold drift, one or both of the distributions may move towards the other, causing some of the threshold voltages to be the same. The region where the threshold voltages are the same for cells programmed at two different program levels is the distribution overlap.    disturb When applying a pulse to a specific bit by raising WL and BL voltages, neighboring bits located on the same WL or same BL might suffer from Vt shift that cause margin loss. The shift is called “disturb”. Disturbs are a fault type where the content of a cell is unintentionally altered when operating on another cell. These faults have similar characteristics to coupling faults, however, they have special neighborhood requirements.            Disturb faults are generally caused by the presence of high/intermediate electric field stress on an insulating layer within the core memory cell. This electric field results in leakage current caused either by FN-tunneling, punchthrough, or channel hot electron injection. Whether a given mechanism is responsible for a particular disturb is a function of the operating conditions and the state of the investigated cell.        The IEEE Standard Definition and Characterization of Floating Gate Semiconductor Arrays disturb faults can be divided into the following:        Word-line erase disturb (WED): Exists when a cell under program (selected cell) causes another unprogrammed cell (unselected cell), sharing the same wordline, to be erased.        Word-line program disturb (WPD): Exists when a cell under program (selected cell) causes another unprogrammed cell (unselected cell), sharing the same wordline, to be programmed.        Bit-line erase disturb (BED): Exists when a cell under program (selected cell) causes another unprogrammed cell (unselected cell), sharing the same bit-line, to be erased.        Bit-line program disturb (BPD): Exists when a cell under program (selected cell) causes another unprogrammed cell (unselected cell), sharing the same bitline, to be programmed.        Read disturb (RD): During read operation, the bias conditions are the same as programming conditions (except for lower voltage magnitudes) and can result in the injection of electrons from drain to FG, thus programming the selected cell. This is known as a soft program. In addition, unselected erased cells may become programmed, and those that are programmed may become erased, giving rise to what is known as gate read erase and channel read program, respectively. Both of these disturbs that occur on un-addressed cells are considered to be another form of read disturbs.            ECC short for error correcting code. An error-correcting code (ECC) is a code in which each data signal conforms to specific rules of construction so that departures from this construction in the received signal can generally be automatically detected and corrected. It is used in computer data storage, for example in dynamic RAM, and in data transmission.            Some codes can correct a certain number of bit errors and only detect further numbers of bit errors. Codes which can correct one error are termed single error correcting (SEC), and those which detect two are termed double error detecting (DED). Hamming codes can correct single-bit errors and detect double-bit errors —SEC-DED. More sophisticated codes correct and detect even more errors.        An error-correcting code which corrects all errors of up to n bits correctly is also an error-detecting code which can detect at least all errors of up to 2n bits.        Two main categories are convolutional codes and block codes. Examples of the latter are Hamming code, BCH code, Reed-Solomon code, Reed-Muller code, Binary Golay code, and low-density parity-check codes.            ED bits as used herein, ED bits are numbers which may be calculated for and stored along with data being programmed (stored), which are indicative of the number of cells (or half-cells) at any given program level, for example, 512 cells (or half cells) at program level “10”. During a subsequent read operation, the ED bits may be retrieved along with the data which was stored; the number of cells at the given program levels are counted, and these counts are compared with the ED bits. If there is a mismatch, this indicates a read error, and an error correction scheme such as “moving read reference” can be implemented. See moving read reference.    EEPROM short for electrically erasable, programmable read only memory. EEPROMs have the advantage of being able to selectively erase any part of the chip without the need to erase the entire chip and without the need to remove the chip from the circuit. The minimum erase unit is 1 Byte and more typically a full Page. While an erase and rewrite of a location appears nearly instantaneous to the user, the write process is usually slightly slower than the read process; the chip can usually be read at full system speeds.    endurance Because they are written by forcing electrons through a layer of electrical insulation onto a floating gate (or charge-trapping medium), some NVM cells can withstand only a limited number of write and erase cycles before the insulation is permanently damaged, and the ability of the cell to function correctly is compromised. In modern Flash EEPROM, the endurance may exceed 1,000,000 write/erase cycles.    EPROM short for erasable, programmable read only memory. EPROM is a memory cell in which information (data) can be erased and replaced with new information (data).    erase a method to erase data on a large set of bits in the array, such as by applying a voltage scheme that inject holes or remove electrons in the bit set. This method causes all bits to reach a low Vt level. See program and read.    Error Detection and Correction In computer science, telecommunication and information theory, error detection and correction has great practical importance in maintaining data (information) integrity across noisy channels and less-than-reliable storage media. More particularly,            Error detection is the ability to detect the presence of errors caused by noise or other impairments during transmission from the transmitter to the receiver.        Error correction is the additional ability to reconstruct the original, error-free data.            FC short for flash (memory) cell.    FG short for floating gate. The floating-gate transistor is a kind of transistor that is commonly used for non-volatile storage such as flash, EPROM and EEPROM memory. Floating-gate transistors are almost always floating-gate MOSFETs. Floating-gate MOSFETs are useful because of their ability to store an electrical charge for extended periods of time even without a connection to a power supply.    Flash memory Flash memory is a form of non-volatile memory (EEPROM) that can be electrically erased and reprogrammed. Flash memory architecture allows multiple memory locations to be erased or written in one programming operation. Two common types of flash memory are NOR and NAND flash. NOR and NAND flash get their names from the structure of the interconnections between memory cells. In NOR flash, cells are connected in parallel to the bit lines, allowing cells to be read and programmed individually. The parallel connection of cells resembles the parallel connection of transistors in a CMOS NOR gate. In NAND flash, cells are connected in series, resembling a NAND gate, and preventing cells from being read and programmed individually: the cells connected in series must be read in series.            Some systems will use a combination of NOR and NAND memories, where a smaller NOR memory is used as software ROM, and a larger NAND memory is partitioned with a file system for use as a random access storage area. NAND is best suited to flash devices requiring high capacity data storage. This type of flash architecture combines higher storage space with faster erase, write, and read capabilities over the execute in place advantage of the NOR architecture. See NAND, NOR.            half cell “half cell” (or “half-cell”) is a term which is sometimes used to refer to the two distinct charge storage areas (left and right “bits”, or left and right “sides”) of an NROM memory cell.    logical operators A logical connective, also called a truth-functional connective, logical operator or propositional operator, is a logical constant which represents a syntactic operation on a sentence, or the symbol for such an operation that corresponds to an operation on the logical values of those sentences. A logical connective serves to return (results in) a “true” or “false” value (such as binary “0” or binary “1”) when applied to arguments (operators) also having true or false values. For example, some common logical operators are:            AND the AND operator results in a value of “true” only if both of the operands (A,B) have a value of “true”. (in binary terms, if A=“1” and B=“1”, then the result is “1”. Otherwise, the result is “0”.)        OR the OR operator results in a results in a value of “true” if one or the other, or both of the operands (A,B) has a value of “true”. (in binary terms, if either one of A or B=“1” and B=“1”, the result is “1”. Otherwise, the result is “0”.)        XOR short for exclusive “or”. the XOR operator results in a value of “true” if and only if exactly one of the operands (A,B) has a value of “true”. (in binary terms, if only one of A or B=“1” and B=“1”, the result is “1”. Otherwise, the result is “0”.)            MLC short for multi-level cell. In the context of a floating gate (FG) memory cell, MLC means that at least two bits of information can be stored in the memory cell. In the context of an NROM memory cell, MLC means that at least four bits of information can be stored in the memory cell—at least two bits in each of the two charge storage areas.    moving read reference as used herein, “moving read reference” refers to a technique, such as disclosed in U.S. Pat. No. 6,992,932 wherein reference voltages are determined to be used in reading cells programmed to a given program state. Generally, if an error is detected, such as by using error detection (ED) bits, the reference voltages may have to be adjusted until the error is resolved. See ED bits.    NAND NAND flash architecture memories are accessed much like block devices such as hard disks or memory cards. The pages are typically 512 or 2,048 or 4,096 bytes in size. Associated with each page are usually a few bytes (typically 12-16 bytes) that are used for storage of an error detection (ED) and correction checksum. The pages are typically arranged in blocks, such as 32 pages of 512 bytes, 64 pages of 2,048 bytes, or 64 pages of 4,096 bytes. With NAND architecture, programming may be performed on a page basis, but erasure can only be performed on a block basis.            Most NAND devices are shipped from the factory with some bad blocks which are typically identified and marked according to a specified bad block marking strategy. The first physical block (block 0) is always guaranteed to be readable and free from errors. Hence, all vital pointers for partitioning and bad block management for the device are located inside this block (typically a pointer to the bad block tables). If the device is used for booting a system, this block may contain the master boot record.            NOR Reading from NOR flash is similar to reading from random-access memory, provided the address and data bus are mapped correctly. Because of this, most microprocessors can use NOR flash memory as execute in place (XIP) memory, meaning that programs stored in NOR flash can be executed directly without the need to copy them into RAM. NOR flash chips lack intrinsic bad block management, so when a flash block is worn out, the software or device driver controlling the device must handle this, or the device will cease to work reliably.    NROM short for nitride(d) read only memory. Generally, a FET-type device having a charge trapping medium such as a nitride layer for storing charges (electrons and holes) in two discrete areas, near the source and drain diffusions, respectively.    NVM short for non-volatile memory. NVM is computer memory that can retain the stored information even when not powered. Examples of non-volatile memory include read-only memory, flash memory, most types of magnetic computer storage devices (for example hard disks, floppy disk drives, and magnetic tape), optical disc drives, and early computer storage methods such as paper tape and punch cards. Non-volatile memory is typically used for the task of secondary storage, or long-term persistent storage. The most widely used form of primary storage today is a volatile form of random access memory (RAM), meaning that when the computer is shut down, anything contained in RAM is lost. Unfortunately most forms of non-volatile memory have limitations which make it unsuitable for use as primary storage. Typically non-volatile memory either costs more or performs worse than volatile random access memory. (By analogy, the simplest form of an NVM memory cell is a simple light switch. Indeed, such a switch can be set to one of two (binary) positions, and can “memorize” that position.) NVM includes floating gate (FG) devices and NROM devices, as well a devices using optical, magnetic and phase change properties of materials.    ONO short for oxide-nitride-oxide. ONO is used as a charge storage insulator consisting of a sandwich of thermally insulating oxide, and charge-trapping nitride.    over-erase a condition that happens to some bits in a large bit set that are erased together, due to erase speed difference, due to the situation that some bits erase faster than other bits. Fast bits are particularly susceptible to over-erase. See erase.    PAE short for program after erase. PAE is useful to avoid cells that experienced over-erase and significant Vt reduction, to become leaky and cause read errors to all cells sharing the same bitlines.    page Generally, a grouping of memory cells can be termed a word, a grouping of words can be termed a page, and a grouping of pages can be termed a sector. Data may be accessed for reading and programming (or writing) by word or by page, while an entire sector is commonly accessed for erasing.    PBE short for program before erase. PBE is useful to bring cells to a more-or-less uniform level prior to performing an erase operation. Particularly, if a cell has been erased a number of times, it may otherwise end up with a negative Vt, which is generally undesirable.    program a method to program a bit in an array, by applying a voltage scheme that injects electrons. This method causes an increase in the Vt of the bit that is being programmed. Alternatively, with “high Vt erase”, programming may be a lowering of the Vt of the memory cell. See erase and read. Program may sometimes, erroneously, be referred to as “write”. See write.    program rate as used herein, “program rate” refers to the number of times that a memory cell (or half cell) is programmed to various program (or threshold voltage) levels, such as representing a binary “1” or “0”.    program time refers to the duration of a single program pulse, or the duration of the whole program sequence algorithm to program a bit set.    programmed “programmed” generally means that the threshold voltage (Vt) of a cell is above a predetermined “program verify” level (Vth).    PROM short for programmable read-only memory.    RAM short for random access memory. RAM refers to data storage formats and equipment that allow the stored data to be accessed in any order—that is, at random, not just in sequence. In contrast, other types of memory devices (such as magnetic tapes, disks, and drums) can access data on the storage medium only in a predetermined order due to constraints in their mechanical design.    read a method to read the digital data stored in the array. The read operation is usually performed in “blocks” of several cells. See erase and program.    refresh a part of the program or erase algorithms that checks the status of bits and applies pulses to bits that may have lost some of their Vt due to reliability margin loss.    register In electronics, a register is a small amount of storage whose contents can be accessed more quickly than storage available elsewhere. Registers are normally measured by the number of bits they can hold, for example, an “8-bit register” or a “32-bit register”. Registers are now usually implemented as a register file, but they have also been implemented using individual flip-flops.    retention Retention generally refers to the ability of a memory cell to retain charges inserted into the charge storage medium, such as a floating gate. The data retention of EPROM, EEPROM, and Flash may be limited by charge leaking from the floating gates of the memory cell transistors. Leakage is exacerbated at high temperatures or in high-radiation environments.    ROM short for read-only memory.    SA short for sense amplifier (or “sense amp”). A sense amplifier is generally used in conjunction with memory arrays to amplify a voltage coming off of a bit line. There are many versions of sense amplifiers used in memory chips.    sector a part of the array, usually larger than a page, which usually contains a few pages. A minimum erase might include a sector. For example:            Erase Sector (ES): Group of cells that are erased by single erase command        Physical Sector (PS): Group of ES connected by single grid of Word Lines (WL) and Bit Lines (BL), sharing same set of drivers.            SLC short for single level cell. In the context of a floating gate (FG) memory cell, SLC means that one bit of information can be stored in the memory cell. In the context of an NROM memory cell, SLC means that at least two bits of information can be stored in the memory cell.    SRAM short for static random access memory. SRAM is a type of semiconductor memory. The word “static” indicates that the memory retains its contents as long as power remains applied, unlike dynamic RAM (DRAM) that needs to be periodically refreshed (nevertheless, SRAM should not be confused with read-only memory and flash memory, since it is volatile memory and preserves data only while power is continuously applied). SRAM should not be confused with SDRAM, which stands for synchronous DRAM and is entirely different from SRAM, or with pseudostatic RAM (PSRAM), which is DRAM configured to function, to an extent, as SRAM.    verify a read operation after applying a program or erase pulse, that checks if the applied program or erase pulse moved the Vt to the target level (program-verify or erase-verify level)    virtual ground array a topological architecture of memory cells where there is an electrical connection between neighboring cells.    V short for voltage. Different voltages may be applied to different parts of a transistor or memory cell to control its operation, such as:            Vb short for bulk (or substrate) voltage        Vd short for drain voltage        Vg short for gate voltage        Vs short for source voltage        Vt short for threshold voltage            wear leveling Wear levelling (also written wear leveling) refers to a technique for prolonging the service life of some kinds of erasable computer storage media, such as flash memory. EEPROM and flash memory media have individually erasable segments, each of which can be put through a finite number of erase cycles before becoming unreliable. This can be anywhere between 10,000 and 1,000,000 cycles, for example, for NAND flash devices. Wear-levelling attempts to work around these limitations by arranging data so that erasures and re-writes are distributed evenly across the medium. In this way, no single sector prematurely fails due to a high concentration of write cycles.    write a combined method usually involving first erasing a large set of bits, then programming new data into the bit set; the erase step is not required but it is customary. See erase and program.